package com.lumberer.pay2021.wx.jsapi.refund.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.lumberer.pay2021.util.Result;
import com.lumberer.pay2021.util.WxRequest;
import com.lumberer.pay2021.wx.enums.PublicState;
import com.lumberer.pay2021.wx.init.config.RequestURL;
import com.lumberer.pay2021.wx.jsapi.refund.entity.Refunds;
/**
 * 退款接口
 * @author luoqy
 *
 */
@RestController
@RequestMapping("/jsapi/refund")
public class JsApiRefundController {
	/**
	 * 申请退款
	 * 当交易发生之后一年内，由于买家或者卖家的原因需要退款时，卖家可以通过退款接口将支付金额退还给买家，微信支付将在收到退款请求并且验证成功之后，将支付款按原路退还至买家账号上。
	 * 注意：
	 * 1、交易时间超过一年的订单无法提交退款
	 * 2、微信支付退款支持单笔交易分多次退款（不超50次），多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。 一笔退款失败后重新提交，请不要更换退款单号，请使用原商户退款单号
	 * 3、错误或无效请求频率限制：6qps，即每秒钟异常或错误的退款申请请求不超过6次
	 * 4、每个支付订单的部分退款次数不能超过50次
	 * 5、如果同一个用户有多笔退款，建议分不同批次进行退款，避免并发退款导致退款失败
	 * 6、申请退款接口的返回仅代表业务的受理情况，具体退款是否成功，需要通过退款查询接口获取结果
	 * 7、一个月之前的订单申请退款频率限制为：5000/min
	 * @param refunds
	 * @return
	 */
	@RequestMapping("")
	public Result refund(@RequestBody Refunds refunds,HttpServletRequest request){
		System.err.println(JSON.toJSONString(refunds));
		JSONObject json=WxRequest.wxHttpPost(RequestURL.REFUNDS_REFUND, refunds);
		System.err.println(json.toJSONString());
		if(StringUtils.isEmpty(json.getString("code"))){
			return Result.success(200, "退款成功", json.toJSONString());
		}else{
			return Result.success(PublicState.getState(json.getString("code")), json.getString("message"), json.toJSONString());
		}
	}
	/**
	 * 查询单笔退款
	 * @param out_refund_no
	 * @return
	 */
	@RequestMapping("/searchRefund")
	public Result searchRefund(String out_refund_no){
		StringBuffer str=new StringBuffer(RequestURL.REFUNDS_DOMESTIC);
		str.append(out_refund_no);
		String uri=str.toString();
		String jsonStr=WxRequest.wxHttpGet(uri);
		JSONObject json=JSONObject.parseObject(jsonStr);
		if(StringUtils.isEmpty(json.getString("code"))){
			return Result.success(200, "查询成功", json);
		}else{
			return Result.error(PublicState.getState(json.getString("code")), json.getString("message"), json);
		}
	}
}
